package com.gxy.learn.pay.service;

import com.gxy.learn.pay.common.Result;
import com.gxy.learn.pay.controller.param.AliPayOrderReqParam;

import javax.servlet.http.HttpServletRequest;

/**
 * 支付宝、微信支付相关
 *
 * @author gxy
 */
public interface PayService {

    /**
     * 服务端创建订单 并返回订订单明细给app端
     * 参考：
     * https://opendocs.alipay.com/open/54/103419
     * https://opendocs.alipay.com/apis/api_1/alipay.trade.create
     *
     * @param commodityIds
     * @return {订单号、响应字符串}
     */
    Result aliPayCreateOrder(String commodityIds);

    /**
     * 服务端创建订单 并返回订订单明细给H5端
     * https://opendocs.alipay.com/apis/api_1/alipay.trade.wap.pay
     *
     * @param reqParam
     * @return
     */
    Result aliPayH5CreateOrder(AliPayOrderReqParam reqParam);

    /**
     * 回调 app端支付成功后回调，服务单查询 订单更新状态
     * 参考：
     * App 支付服务端 DEMO&SDK https://opendocs.alipay.com/open/54/106370#JAVA%20%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%AA%8C%E8%AF%81%E5%BC%82%E6%AD%A5%E9%80%9A%E7%9F%A5%E4%BF%A1%E6%81%AF%E5%8F%82%E6%95%B0%E7%A4%BA%E4%BE%8B
     * 异步通知说明： https://opendocs.alipay.com/open/203/105286
     *
     * @param request
     * @return 订单回调地址
     */
    void aliPayNotify(HttpServletRequest request);

    /**
     * app回调
     * 参考：https://opendocs.alipay.com/apis/028xq9
     *
     * @param outTradeNo 商户订单号
     * @return 订单支付状态
     */
    Result aliPayAppNotify(String outTradeNo);
}